package InnerClassDemo;

class OuterClass{
    public int data1=1;
    private int data2=2;
    public static int data3=3;

    /**
     * 实例内部类定义在类的内部，方法的外部！
     * 1. 这个实例内部类到底怎么使用？
     *
     */
    class InnerClass {
        public int data1=100;
        public int data4=4;
        private int data5=5;
        public static final int data6=6;

        public void test() {
            System.out.println("InnerClass test");
            System.out.println("data4="+data4);
            System.out.println("data5="+data5);
            System.out.println("=========================");
            /**
             * 如何访问外部类的同名成员？
             * outer.this.data
             * 或者你在内部类实例化一个外部类对象，然后再访问
             */
            System.out.println("data1="+data1);//内部类可以访问外部类的成员
            System.out.println("Outer.data1="+OuterClass.this.data1);//内部类可以访问外部类的成员

            System.out.println("data2="+data2);
            System.out.println("data3="+data3);
            testA();

        }
    }

    public void testA() {
        System.out.println("OuterClass testA");
    }
}

public class Test {
    public static void main(String[] args) {
//        InnerClass outerClass=new InnerClass();

        OuterClass out=new OuterClass();
        out.testA();
        OuterClass.InnerClass innerClass1=out.new InnerClass();

        OuterClass.InnerClass innerClass=new OuterClass().new InnerClass();
        innerClass.test();

    }
}
